package com.ruge.user.controller;

import com.ruge.core.excel.ExcelTool;
import com.ruge.core.excel.MapWriteData;
import com.ruge.tool.date.DateTool;
import com.ruge.tool.json.JsonTool;
import com.ruge.user.domain.model.DownloadData;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Slf4j
@RestController
@Api(tags = "【excel 相关接口】", value = "【excel 相关接口】")
@RequestMapping("excel")
public class ExcelController {

    /**
     * 文件下载（失败了会返回一个有部分数据的Excel）
     * <p>
     * <p>
     * 2. 设置返回的 参数
     * <p>
     * 3. 直接写，这里注意，finish的时候会自动关闭OutputStream,当然你外面再关闭流问题不大
     */
    @GetMapping("download")
    public void download(HttpServletResponse response) throws IOException {
        List<DownloadData> list = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
            list.add(DownloadData.builder()
                    .string("张" + i)
                    .date(new Date(DateTool.addDay(i)))
                    .build());
        }
        ExcelTool.download(response, DownloadData.class, "sheet1", list, "测试·1");
    }

    /**
     * 文件下载（失败了会返回一个有部分数据的Excel）
     * <p>
     * <p>
     * 2. 设置返回的 参数
     * <p>
     * 3. 直接写，这里注意，finish的时候会自动关闭OutputStream,当然你外面再关闭流问题不大
     */
    @GetMapping("download2")
    public void download2(HttpServletResponse response) throws IOException {
        List<DownloadData> list = new ArrayList<>();
        String json = "{\"code\":0,\"msg\":null,\"data\":{\"total\":3,\"listData\":[{\"100\":\"选项1\",\"101\":\"选项1\",\"102\":\"如歌的第三题回答\",\"103\":\"5\",\"104\":\"5\",\"105\":\"8\",\"106_0\":\"标题1$%$5\",\"106_1\":\"标题2$%$5\",\"107\":\"张1\",\"108\":\"13211110001\",\"109\":\"男\",\"110\":\"18岁以下\",\"111\":\"13211110002\",\"displayName\":\"\",\"phone\":\"13211110000\",\"title\":\"问卷标题\"},{\"100\":null,\"101\":null,\"102\":null,\"103\":null,\"104\":null,\"105\":null,\"106_0\":null,\"106_1\":null,\"107\":null,\"108\":null,\"109\":null,\"110\":null,\"111\":null,\"88\":\"选项1\",\"89\":\"选项1\",\"90\":\"如歌测试01\",\"91\":\"5\",\"92\":\"5\",\"93\":\"8\",\"94_0\":\"标题1$%$5\",\"94_1\":\"标题2$%$5\",\"95\":\"ruge\",\"96\":\"13211112222\",\"97\":\"男\",\"98\":\"18岁以下\",\"99\":\"13211112222\",\"displayName\":\"\",\"phone\":\"188965356\",\"title\":\"问卷标题\"},{\"100\":null,\"101\":null,\"102\":null,\"103\":null,\"104\":null,\"105\":null,\"106_0\":null,\"106_1\":null,\"107\":null,\"108\":null,\"109\":null,\"110\":null,\"111\":null,\"75\":\"选项1\",\"76\":\"选项1\",\"77\":\"这个给wujian 的测试数据 很完美的数据\",\"78\":\"4\",\"79\":\"3\",\"80\":\"7\",\"81_0\":\"标题1$%$4\",\"81_1\":\"标题2$%$3\",\"82\":\"超人团队\",\"83\":\"18599996666\",\"84\":\"女\",\"85\":\"25~30岁\",\"86\":\"18863214569\",\"displayName\":\"\",\"phone\":\"999\",\"title\":\"问卷标题\"}],\"title\":[{\"100\":\"请选择一个选项\",\"101\":\"请选择一个选项(多选)\",\"102\":\"请填写本项内容\",\"103\":\"请给本项打分\",\"104\":\"请您对此项目进行评价\",\"105\":\"本项的程度有多大\",\"106_0\":\"标题1\",\"106_1\":\"标题2\",\"107\":\"姓名\",\"108\":\"手机\",\"109\":\"性别\",\"110\":\"您的年龄是？\",\"111\":\"手机\",\"displayName\":\"\",\"phone\":\"13211110000\",\"title\":\"问卷标题\"}]}}";
        Map<String, Object> jsonToMap = JsonTool.getJsonToMap(json);
        jsonToMap = JsonTool.getObjToMap(jsonToMap.get("data"));
        List<Map<String, Object>> listData = JsonTool.getObjToMaps(jsonToMap.get("listData"));
        List<Map<String, Object>> listTitle = JsonTool.getObjToMaps(jsonToMap.get("title"));

        MapWriteData mapWriteData = new MapWriteData();
        mapWriteData.setFileName("张三的歌");
        mapWriteData.setSheetName("sheet123");
        mapWriteData.setHeadMap(listTitle.get(0).values().toArray(new String[0]));
        mapWriteData.setDataStrMap(listTitle.get(0).keySet().toArray(new String[0]));
        mapWriteData.setDataList(listData);
        ExcelTool.mapDownload(mapWriteData, response);
    }
}
